2. 컬렉션 캡슐화하기
- 필요한 인터페이스만 노출하자
- 무분별한 Getter/Setter 보다 Getter할 대상의 필요한 인터페이스(add, remove, etc.)만 노출
예시 코드
class Refrigerator {
constructor() {
this._grocery = []
}
get grocery() {
return this._grocery
}
set grocery(arg) {
this._grocery = arg
}
}
const myRefrigerator = new Refrigerator()
myRefrigerator.grocery(myRefrigerator.grocery.concat('Egg'))
const myGroceryCabinet = myRefrigerator.grocery
myGroceryCabinet.push('Tofu')
myRefrigerator.grocery(myGroceryCabinet)
myGroceryCabinet.splice(
this._grocery.findIndex((item) => item === 'Tofu'),
1
)
myRefrigerator.grocery(myGroceryCabinet)
class Refrigerator {
constructor() {
this._grocery = []
}
addGrocery(grocery) {
this._grocery.push(grocery)
}
removeGrocery(arg) {
this._grocery.splice(
this._grocery.findIndex((item) => item === arg),
1
)
}
}
const myRefrigerator = new Refrigerator()
myRefrigerator.addGrocery('Egg')
myRefrigerator.addGrocery('Tofu')
myRefrigerator.removeGrocery('Tofu')